﻿import cgi
import os

from google.appengine.ext.webapp import template
from google.appengine.api import users
from google.appengine.ext import webapp
from google.appengine.ext.webapp.util import run_wsgi_app
from google.appengine.ext import db

class Chiste(db.Model):
  autor = db.UserProperty()
  chiste = db.TextProperty()
  tipo = db.StringProperty()
  votos = db.IntegerProperty()
  date = db.DateTimeProperty(auto_now_add=True)
  
  
class Votos(db.Model):
  chiste = db.ReferenceProperty(Chiste)
  usuario = db.UserProperty()
  
  
class MainPage(webapp.RequestHandler):
  def get(self):
    usuario = users.get_current_user()
    
    if usuario:
      url = users.create_logout_url(self.request.uri)
      url_linktext = 'Cerrar Sesión'
    else:
      url = users.create_login_url(self.request.uri)
      url_linktext = 'Iniciar Sesión'
      
    template_values = {
      'url': url,
      'url_linktext': url_linktext,
      'usuario': users.get_current_user() 
    }
    
    path = os.path.join(os.path.dirname(__file__), 'index.html')
    self.response.out.write(template.render(path, template_values))
    
    
class Votar(webapp.RequestHandler):
  def get(self, tipo, id):
    chiste = Chiste.get_by_id(int(id))
    votar = Votos.all().filter('usuario = ', users.get_current_user()).filter('chiste = ', chiste)
    
    if votar.count() > 0:
      return self.redirect('/lista')
    else:
      votar = Votos()
      votar.chiste = chiste
      votar.usuario = users.get_current_user()
      votar.put()
      
    if tipo == 'si':
      if chiste.votos is None:
        chiste.votos = 1
      else:
        chiste.votos = chiste.votos + 1
    else:
      if chiste.votos is None:
        chiste.votos = -1
      else:
        chiste.votos = chiste.votos - 1
    chiste.put()
    self.redirect('/lista')
    
    
class Lista(webapp.RequestHandler):
  def get(self):
    usuario = users.get_current_user()
    
    if usuario:
      url = users.create_logout_url(self.request.uri)
      url_linktext = 'Cerrar Sesión'
    else:
      url = users.create_login_url(self.request.uri)
      url_linktext = 'Iniciar Sesión'
      
    template_values = {
      'chistes': Chiste.all().order('-date'),
      'url': url,
      'url_linktext': url_linktext,
      'usuario': usuario,
    }
    
    path = os.path.join(os.path.dirname(__file__), 'lista.html')
    self.response.out.write(template.render(path, template_values))
    
  def post(self):
    chiste = Chiste()
    
    if users.get_current_user():
      chiste.autor = users.get_current_user()
      
    chiste.chiste = self.request.get('chiste')
    chiste.tipo = self.request.get('tipo')
    chiste.put()
    self.redirect('/lista')
    
application = webapp.WSGIApplication([
    ('/', MainPage),
    ('/sign', Lista),
    ('/lista', Lista),
    ('/votar/(..)/(\d+)', Votar),
  ],debug=True)

def main():
  run_wsgi_app(application)

if __name__ == "__main__":
  main()